package com.example.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 注解	                                    作用
 * @Data                                    自动生成 Getter/Setter、toString、hashCode、equals 方法
 * @EqualsAndHashCode(callSuper = false)	不调用父类的 equals/hashCode
 * @Accessors(chain = true)	                支持链式调用，如 voucher.setId(1L).setTitle("满减券")
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_voucher")
public class Voucher implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     * IdType.AUTO: 使用数据库的 自增主键（如 MySQL 的 AUTO_INCREMENT）
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 商铺id
     */
    private Long shopId;

    /**
     * 代金券标题
     */
    private String title;

    /**
     * 副标题
     */
    private String subTitle;

    /**
     * 使用规则
     */
    private String rules;

    /**
     * 支付金额
     */
    private Long payValue;

    /**
     * 抵扣金额
     */
    private Long actualValue;

    /**
     * 优惠券类型
     */
    private Integer type;

    /**
     * 优惠券类型
     */
    private Integer status;

    /**
     * 声明该字段 不是数据库表字段
     * @TableField(exist = false)
     */
    /**
     * 库存
     */
    @TableField(exist = false)
    private Integer stock;

    /**
     * 生效时间
     */
    @TableField(exist = false)
    private LocalDateTime beginTime;

    /**
     * 失效时间
     */
    @TableField(exist = false)
    private LocalDateTime endTime;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

}
/**
 * 点	        内容
 * 映射方式	    @TableName, @TableId, @TableField 指定数据库映射
 * 字段来源	    Voucher 的 stock、beginTime、endTime 是从 SeckillVoucher 联表得来，非数据库字段
 * 主键策略	    Voucher 用数据库自动生成，SeckillVoucher 使用 Voucher.id
 * 数据关系	    一对一共享主键关系：每一个 Voucher 如果是秒杀券，对应有一个 SeckillVoucher 记录
 * Lombok 简化	使用 @Data 和链式调用让实体类更简洁
 */
